#!/bin/bash

# 启动脚本配置
APP_NAME="todo-sync"
JAR_FILE_NAME="todo-sync.jar"
JAR_FILE_PATH="/projs/todo/backend"
JAR_PATH="/projs/todo/backend/todo-sync.jar"
CONFIG_FILE="/projs/todo/backend/application.yml"
LOG_FILE="/var/log/todo-sync.log"
STARTUP_LOG="/var/log/todo-sync-startup.log"
PID_FILE="/var/run/todo-sync.pid"
JAVA_OPTS="-Xms256m -Xmx256m -Dspring.config.location=$CONFIG_FILE"

# 检查必要文件是否存在
if [ ! -f "$JAR_PATH" ]; then
    echo "$(date): 错误: 找不到 JAR 文件: $JAR_PATH" >> "$STARTUP_LOG"
    exit 1
fi

if [ ! -f "$CONFIG_FILE" ]; then
    echo "$(date): 警告: 找不到配置文件: $CONFIG_FILE" >> "$STARTUP_LOG"
fi

# 检查 Java 是否安装
if ! command -v java &> /dev/null; then
    echo "$(date): 错误: Java 未安装" >> "$STARTUP_LOG"
    exit 1
fi

# 检查是否已在运行
if [ -f "$PID_FILE" ]; then
    OLD_PID=$(cat "$PID_FILE")
    if ps -p "$OLD_PID" > /dev/null 2>&1; then
        echo "$(date): 警告: $APP_NAME 已在运行 (PID: $OLD_PID)" >> "$STARTUP_LOG"
        exit 1
    else
        echo "$(date): 清理陈旧的 PID 文件" >> "$STARTUP_LOG"
        rm -f "$PID_FILE"
    fi
fi

# 切换到项目目录
cd $JAR_FILE_PATH

# 启动应用
echo "$(date): 启动 $APP_NAME 服务..." >> "$STARTUP_LOG"
nohup java $JAVA_OPTS -jar $JAR_FILE_NAME >> "$LOG_FILE" 2>&1 &

# 记录进程 ID
PID=$!
echo $PID > "$PID_FILE"
echo "$(date): $APP_NAME 服务启动完成，PID: $PID" >> "$STARTUP_LOG"

# 验证进程是否在运行
sleep 3
if ps -p "$PID" > /dev/null 2>&1; then
    echo "$(date): 验证: 进程 $PID 正在运行" >> "$STARTUP_LOG"
else
    echo "$(date): 错误: 进程 $PID 启动后立即退出" >> "$STARTUP_LOG"
    rm -f "$PID_FILE"
    exit 1
fi

